package com.baizhi.service;

import com.baizhi.aop.CacheFind;
import com.baizhi.aop.CacheFindUpdate;
import com.baizhi.dao.EmpDAO;
import com.baizhi.entity.Emp;
import com.baizhi.entity.EmpCondition;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.control.CodeGenerationHint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import redis.clients.jedis.JedisCluster;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@Transactional
@Slf4j
public class EmpServiceImpl implements EmpService {

    @Autowired
    private EmpDAO empDAO;

    @Autowired
    private JedisCluster jedis;

    @Override
    public Emp findOne(String id) {
        return empDAO.findOne(id);


    }
    @CacheFindUpdate(key="findAllPage::")
    @Override
    public void update(Emp emp) {
        empDAO.update(emp);
    }

    @CacheFindUpdate(key="findAllPage::")
    @Override
    public void delete(String id) {
        empDAO.delete(id);
    }

    //保存员工信息
    @CacheFindUpdate(key="findAllPage::")
    @Override
    public void save(Emp emp) {
        empDAO.save(emp);
    }


    /*@Override //如果当前存在事务，则加入该事务；如果当前没有事务，则以非事务的方式继续运行。
    @Transactional(propagation = Propagation.SUPPORTS)
    public Map<String,Object> findAll(Integer page,Integer rows) {
        Map<String,Object> map=new HashMap<>();
        Integer rowCount = empDAO.findCount(null,null,null,null,null);
        log.info("数据库总数:"+rowCount);
        //分页查询
        //limit (页码-1)*每页显示记录数, 每页显示记录数`  计算没页第一行的下标值
        Integer starIndex=(page-1)*rows;
        List<Emp> emps = empDAO.findAllPage(starIndex,5,null,null,null,null,null);
        //计算总页数
        Integer pageCount=(rowCount-1)/5+1;
        map.put("emps",emps);
        map.put("rowCount",rowCount);
        map.put("pageCount",pageCount);
        return map;
    }*/

    @CacheFind(key="findAllPage::")
    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public Map<String,Object> findAllPage(Integer page, Integer rows, String name,Integer minAge,Integer maxAge,Double minSalary,Double maxSalary){
        log.info("目标方法被执行.................");
        log.info("EmpServiceImpl层中的姓名:"+name);
        log.info("EmpServiceImpl层中的最低薪资:"+minSalary+"    EmpServiceImpl层中的最高薪资:"+maxSalary);
        log.info("EmpServiceImpl层中的最低年龄:"+minAge+"    EmpServiceImpl层中的最高年龄:"+maxAge);
        Map<String,Object> map=new HashMap<>();
        //根据条件查询数据库的总记录数
        Integer rowCount = empDAO.findCount(name,minAge,maxAge,minSalary,maxSalary);
        //limit (页码-1)*每页显示记录数, 每页显示记录数`  计算没页第一行的下标值
        Integer starIndex=(page-1)*rows;
        //分页查询
        List<Emp> emps = empDAO.findAllPage(starIndex, rows,name,minAge,maxAge,minSalary,maxSalary);
        //计算总页数
        Integer pageCount=(rowCount-1)/rows+1;
        map.put("emps",emps);
        map.put("rowCount",rowCount);
        map.put("pageCount",pageCount);
        return map;
    }
}
